Select DATEPART(WEEK,'2023/01/01') As'SQL-Week' --1
特性:
預設開始的第一天為星期日
,可由set datefirst 7調整每年的1/1為第一週
Select DATEPART(ISO_WEEK,'2023/01/01') As'SQL-ISO_Week' --52
特性:
預設開始的第一天為星期一
,set datefirst 7調整無效每一週都有七天
--set datefirst 7; --預計是datefirst 7 => 就是星期日為第一天; 如果要調整的話,CASE WHEN也要相對應調整
DECLARE @StartDate DATE = '2003/12/25'
, @EndDate DATE = '2025/03/01'
;WITH SeqDates AS (
SELECT [Date] = @StartDate --如果要改為DateTime可以用 CONVERT(DATETIME,@StartDate)
UNION ALL
SELECT [Date] = DATEADD(DAY, 1, [Date])
FROM SeqDates WHERE [Date] < @EndDate
)
SELECT [Date]
,CASE
WHEN DATEPART(WEEKDAY,[Date]) = 1 THEN N'星期日'
WHEN DATEPART(WEEKDAY,[Date]) = 2 THEN N'星期一'
WHEN DATEPART(WEEKDAY,[Date]) = 3 THEN N'星期二'
WHEN DATEPART(WEEKDAY,[Date]) = 4 THEN N'星期三'
WHEN DATEPART(WEEKDAY,[Date]) = 5 THEN N'星期四'
WHEN DATEPART(WEEKDAY,[Date]) = 6 THEN N'星期五'
WHEN DATEPART(WEEKDAY,[Date]) = 7 THEN N'星期六'
END As'WeekDay(TW)'
,DATEPART(WEEKDAY,[Date]) As'WeekDay'
,DATEPART(WEEK,[Date]) As'SQL-Week',DATEPART(ISO_WEEK,[Date]) As'SQL-ISO_Week'
FROM SeqDates
Where [Date] like '%-12-2[5-9]' or [Date] like '%-12-3[0-1]' or [Date] like '%-01-0[1-7]' --只取每年12/25~01/07來比較
OPTION (MAXRECURSION 0) --MAXRECURSION設為0時就是不限定遞迴次數; 但是要避免無窮迴圈
如果要修改可以參考: https://ithelp.ithome.com.tw/questions/10208690?sc=rss.qu
最後還是要看使用者要接受哪一種週別的定義。
參考資料來源:
https://learn.microsoft.com/zh-tw/sql/t-sql/functions/datepart-transact-sql?view=sql-server-ver16
https://ithelp.ithome.com.tw/questions/10208690?sc=rss.qu
https://zh.wikipedia.org/wiki/ISO%E9%80%B1%E6%97%A5%E6%9B%86